/**
 * @author Mark
 * @decs 后端入口文件
 */
const express = require('express')
const path = require('path')
const swig = require('swig')
const mongoose = require('mongoose')
const bodyParser = require('body-parser')
const Cookies = require('cookies')
const markdown = require( "markdown" ).markdown

const app = express()

// 跨域处理
app.all('*', (req, res, next) => {
  res.header("Access-Control-Allow-Origin", "*")
  res.header("Access-Control-Allow-Headers", "X-Requested-With,Content-Type")
  res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS")
  // res.header("Content-Type", "application/json;charset=utf-8")
  res.header('Set-Cookie', 'name=xiaoming')
  // res.header('Cache-Control', 'public, max-age=360000000')
  next()
})

let User = require('./models/user')

// 注册模板引擎
// 第一个参数：模板引擎的名称，同时也是模板文件的后缀，第二个参数表示用于解析处理模板内容的方法
app.engine('html', swig.renderFile)
// 对应模板文件夹
// 设置模板文件存放的目录，第一个参数必须是views，第二个参数是目录
app.set('veiws', './views')
// 注册模板文件
// 注册所使用的模板引擎，第一个参数必须是 view engine，第二个参数和app.engine这个方法中定义的模板引擎的名称（第一个参数）是一致的
app.set('view engine', 'html')
// 设置模板引擎缓存
swig.setDefaults({
  cache: false
})

// 处理配置项
// 注册bodyParser 处理 post请求
app.use(bodyParser.urlencoded({
  extended: false
}))
// 配置cookie
app.use((req, res, next) => {
  req.cookies = new Cookies(req, res)
  // 储存用户信息
  req.userInfo = {}
  // 储存信息
  req.api = {}
  if (!!req.cookies.get('userInfo')) {
    try {
      let userInfo = JSON.parse(req.cookies.get('userInfo'))
      // 校验该信息是否是数据数据库中的信息
      User.findById({
        _id: userInfo.id
      }).then((data) => {
        if (!!data) {
          req.userInfo = data
        } else {
          req.userInfo = {}
        }
        next()
      })
    } catch (e) {
      next()
    }
  } else {
    next()
  }
})

// app.use(bodyParser.json())

// 处理接口
app.use('/admin', require('./routers/admin'))
app.use('/api', require('./routers/api'))
app.use('/', require('./routers/main'))

// 处理静态文件
app.use('/public', express.static(path.join(__dirname, 'public')))

// 连接数据库
mongoose.connect('mongodb://localhost/blog', err => {
  if (err) {
    res.send('数据库异常')
    throw err.message
  } else {
    console.log('连接成功')
    app.listen(3302)
  }
})
